package me.szlx.validation;

import java.util.function.Predicate;

public final class PredicativeConditional<T> implements Conditional {
    private final Predicate<T> predicate;
    private final T target;

    public PredicativeConditional(Predicate<T> predicate, T context) {
        this.predicate = predicate;
        this.target = context;
    }

    /**
     * 使用当前对象既存的断言，以及指定的待断言的对象<b>创建新的</b>{@link Conditional}对象。
     *
     * @param context 待切入的上下文，即条件断言的对象。
     * @return 新的{@link Conditional}对象。
     */
    public PredicativeConditional newWith(T context) {
        return new PredicativeConditional(predicate, context);
    }

    @Override
    public boolean apply() {
        return predicate.test(target);
    }
}